#include <_mysql.h>

connection conn;
sqlstatement stmt;

// 定义用于超女信息的结构，与表中的字段对应。
struct st_girls
{
    long id;        // 超女编号
    char name[31];  // 超女姓名
    double weight;  // 超女体重
    char btime[20]; // 报名时间
} stgirls;

int main()
{
    if (conn.connecttodb("127.0.0.1,root,Wanyingxing0@Bjut,mysql,3306", "utf8") != 0)
    {
        printf("connect database failed.\n%s\n", conn.m_cda.message);
        return -1;
    }
    stmt.connect(&conn);

    // 修改：upadata 表ming set 字段1=?，字段2=?，字段3=?，where id=?;
    stmt.prepare("\
    update girls set name=:1,weight=:2,btime=str_to_date(:3,'%%Y-%%m-%%d %%H:%%i:%%s') where id=:4");

    stmt.bindin(1, stgirls.name, 30);
    stmt.bindin(2, &stgirls.weight);
    stmt.bindin(3, stgirls.btime, 19);
    stmt.bindin(4, &stgirls.id);

    // 定义自己的修改规则
    for (int ii = 0; ii < 5; ii++)
    {
        memset(&stgirls, 0, sizeof(struct st_girls)); // 结构体变量初始化。

        // 为结构体变量的成员赋值。
        stgirls.id = ii + 1;                                 // 超女编号。
        sprintf(stgirls.name, "貂蝉%05dgirl", ii + 1);       // 超女姓名。
        stgirls.weight = ii + 48.39;                         // 超女体重。
        sprintf(stgirls.btime, "2021-10-02 11:25:%02d", ii); // 报名时间。

        // 执行SQL语句，一定要判断返回值，0-成功，其它-失败。
        // 失败代码在stmt.m_cda.rc中，失败描述在stmt.m_cda.message中。
        if (stmt.execute() != 0)
        {
            printf("stmt.execute() failed.\n%s\n%s\n", stmt.m_sql, stmt.m_cda.message);
            return -1;
        }

        printf("成功修改了%ld条记录。\n", stmt.m_cda.rpc); // stmt.m_cda.rpc是本次执行SQL影响的记录数。
    }

    printf("update table girls ok.\n");

    conn.commit(); // 提交数据库事务。

    return 0;
}